import vue from '@vitejs/plugin-vue';
import * as path from 'path';
import AutoImport from 'unplugin-auto-import/vite';
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
import Components from 'unplugin-vue-components/vite';
import { defineConfig } from 'vite';
import vitePluginCompression from 'vite-plugin-compression';
let url = 'http://47.110.35.176:38080/';
// url = 'https://test-erpsuzhou.imagecolor.cn/'; //苏州正式
// url = 'http://test-erpguangzhou.imagecolor.cn/'; //广州正式
export default defineConfig(({ mode }) => {
  // 工具函数：解析文件名和扩展名
  function parseFileName(fullName) {
    const lastDotIndex = fullName.lastIndexOf('.');
    const name = fullName.slice(0, lastDotIndex);
    const ext = fullName.slice(lastDotIndex).toLowerCase();
    return { name, ext };
  }

  // 判断是否为字体文件
  function isFont(ext) {
    return /\.(woff2?|ttf|eot|otf)(\?.*)?$/i.test(ext);
  }

  // 判断是否为图片资源
  function isImage(ext) {
    return /\.(png|jpe?g|gif|webp|avif|svg)(\?.*)?$/i.test(ext);
  }

  // 判断是否为音视频资源
  function isMedia(ext) {
    return /\.(mp4|m4v|webm|ogv|mp3|wav|ogg|flac|aac)(\?.*)?$/i.test(ext);
  }

  return {
    plugins: [
      vue(),
      vitePluginCompression(),
      // 解决 `import { ref , reactive ..... } from 'vue'` 大量引入的问题
      AutoImport({
        imports: ['vue', 'vue-router'],
        resolvers: [ElementPlusResolver()],
      }),
      Components({
        resolvers: [ElementPlusResolver()],
      }),
    ],
    build: {
      rollupOptions: {
        output: {
          // JS 输出路径
          entryFileNames: `js/[name]-[hash].js`,
          chunkFileNames: `js/[name]-[hash].js`,
          //手动分包
          manualChunks(id) {
            if (id.includes('node_modules')) {
              // 剩下的其他依赖统一打包到 vendor
              return 'vendor';
            }
            if (id.includes('components')) {
              return 'components';
            }
          },
          // 资源文件分类输出
          assetFileNames: (assetInfo) => {
            const { name, ext } = parseFileName(assetInfo.name);

            // 字体文件：woff, woff2, ttf, eot, otf, svg
            if (isFont(ext)) {
              return `fonts/${name}-[hash]${ext}`;
            }

            // CSS 文件
            if (ext === '.css') {
              return `css/${name}-[hash]${ext}`;
            }

            // 图片类资源
            if (isImage(ext)) {
              return `images/${name}-[hash]${ext}`;
            }

            // 视频/音频资源
            if (isMedia(ext)) {
              return `media/${name}-[hash]${ext}`;
            }

            // 其他资源统一归类
            return `assets/${name}-[hash]${ext}`;
          },
        },
      },
    },
    //
    server: {
      open: true, // 是否设置开启自动打开浏览器
      host: 'localhost',
      port: 3000,
      proxy: {
        '/api': {
          target: url, //这是你要跨域请求的地址前缀
          changeOrigin: true, //开启跨域
        },
        '/TempFiles': {
          target: url, //这是你要跨域请求的地址前缀
          changeOrigin: true, //开启跨域
        },
        '/UpLoadFiles': {
          target: url, //这是你要跨域请求的地址前缀
          changeOrigin: true, //开启跨域
        },
        '/UpLoadImages': {
          target: url, //这是你要跨域请求的地址前缀
          changeOrigin: true, //开启跨域
        },
        '/ThumbnailFiles': {
          target: url, //这是你要跨域请求的地址前缀
          changeOrigin: true, //开启跨域
        },
        '/task': {
          target: 'https://www.runninghub.cn', //这是你要跨域请求的地址前缀
          changeOrigin: true, //开启跨域
        },
        '/uc': {
          target: 'https://www.runninghub.cn', //这是你要跨域请求的地址前缀
          changeOrigin: true, //开启跨域
        },
      },
    },
    //
    resolve: {
      // 配置路径别名
      alias: {
        '@': path.resolve(__dirname, 'src'),
        '@img': path.resolve(__dirname, './src/assets/images/'),
        '@scss': path.resolve(__dirname, './src/assets/scss/'),
      },
    },
    // 引入scss全局变量
    css: {
      preprocessorOptions: {
        scss: {
          additionalData: `@import "@/styles/_color.scss";@import "@/styles/_layout.scss";`,
        },
      },
    },
  };
});
